package outoforder.leetcode01;

/**
 * @author shhjiang_001
 * @create 2020-07-18 19:13
 */

// 颜色填充
public class Solution0810 {
    public int[][] floodFill(int[][] image, int sr, int sc, int newColor) {
        int origColor = image[sr][sc];
        fill(image,sr,sc,origColor,newColor);
        return image;
    }

    private void fill(int[][] image, int x, int y, int origColor, int newColor) {
        if (!inArea(image,x,y)) return;
        if (image[x][y] != origColor) return;
        if (image[x][y] == -1) return;
        image[x][y] = -1;
        fill(image,x,y-1,origColor,newColor);
        fill(image,x-1,y,origColor,newColor);
        fill(image,x+1,y,origColor,newColor);
        fill(image,x,y+1,origColor,newColor);
        image[x][y] = newColor;
    }

    private boolean inArea(int[][] image, int x, int y) {
        return x >= 0 && x < image.length && y >= 0 && y<image[0].length;
    }
}
